package com.itfenghuang.day12;

import java.io.*;

/*
    序列化流:把一个对象写到文件中
    反序列化流:把一个对象读到程序中
 */
public class A03_对象操作流 {
/*
    面试题:  创建对象的方式有几种?
            new,克隆,反序列化,反射
     1.概述
            将对象整体写出到文件
            从文件中读取对象到程序中

     2.ObjectOutputStream序列化流    (将对象写到文件中)
        构造方法: public ObjectOutputStream(OutputStream out)

     3.ObjectInputStream反序列化流
        构造方法:public ObjectInputStream(InputStream in)
        有可能 会出现InvalidClassException异常,序列化的类被修改了
        private static final long serialVersionUID=2L


     作业: 1.分别将三个学生保存到本地文件中,并反序列化出来
            2.转换流与对象操作流会写
            3.考试题写一遍
            4.复习一下前面的内容   从java开始
 */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
//        写一个输出流,将账号和密码直接写到文件中

//        字符缓冲输出流
//        BufferedWriter bf =
//                new BufferedWriter(new FileWriter("F:\\aaa\\a.txt"));
//        bf.write("xiaoai");
//        bf.newLine();
//        bf.write("12345");
//        bf.close();

//序列化
        ObjectOutputStream oos =
                new ObjectOutputStream(
                        new FileOutputStream("F:\\aaa\\a.txt"));
//        如果自定义类没有实现SeriaLizable接口,会出现NotSerialializableException异常
//        Serialializable接口:起到标记作用,表示着该类可以被序列化和反序列化
        User user = new User("tom", "123");
        User user1 = new User("dog", "123");
        oos.writeObject(user);
        oos.writeObject(user1);
        oos.close();

//反序列化
        ObjectInputStream ois = new ObjectInputStream
                (new FileInputStream("F:\\aaa\\a.txt"));
            User user2 =(User) ois.readObject();
            User user3 =(User) ois.readObject();
//        Object o = ois.readObject();
//        Object o1 = ois.readObject();
        System.out.println(user2);
        System.out.println(user3);
        ois.close();


    }
}
